package scene.composants;

import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;

/**
 * Interface des composants de la scene
 * Tous les composants doivent l'implementer
 * 
 * @author Delmas Gabriel
 */
public interface IDessinableManipulable
{

	/**
	 * Affichage du menu contextuel
	 * @param p position du menu contextuel
	 */
	public void actionMenuContextuel(Point p);
	
	/**
	 * Action a realiser lors d'un double clique
	 */
	public void actionDoubleClique();
	

	public boolean dependanceHeritage(IDessinableManipulable figure);
	public boolean dependanceAgregation(IDessinableManipulable figure);
	
	/**
	 * Affichage du composant
	 * @param g2d contexte graphique
	 */
	public void dessiner(Graphics2D g2d);
	
	/**
	 * Permet de savoir si un point est contenu dans le composant
	 * @param p le point
	 * @return true si le point est contenu sinon false
	 */
	public boolean intersection(Point p);
	
	/**
	 * Permet de savoir si il y a une intersection avec un rectangle
	 * @param r le rectangle
	 * @return true si le rectangle entrecoupe le composant sinon false
	 */
	public boolean intersection(Rectangle r);
	
	
	/**
	 * Permet de savoir si un point est contenu dans une des 4 extremites du composants
	 * @param p le point
	 * @return true si le point est contenu dans une extremite sinon false
	 */
	public boolean intersectionExtremite(Point p);
	
	/**
	 * Deplace une extremite afin de pouvoir modifier les dimensions du composant
	 * @param p_new le point
	 */
	public void deplacerExtremite(Point p_new);
	
	/**
	 * Deselectionne le composant
	 */
	public void relacherExtremites();
	
	//Accesseurs
	public void setEstSelectionner(boolean select);
	public boolean getEstSelectionner();
	public void setPosition(Point p);
	public Point getPosition();
	public void setExtremiteSelectionnee(String nom_extremite);
	public String getExtremiteSelectionnee();
	public void setXYEspace(Dimension xyespace);
	public Dimension getXYEspace();
	public void setEstTransfere(boolean transferer);
	public Dimension getDimension();
	public Point getPositionCentre();
	public Rectangle getRectangle();
	public boolean getTransfere();
}
